Create PROC [dbo].[MakeAutoReturnPrescription]
    @ReferenceInvoiceNo VARCHAR(10),
    @RegistrationUser SMALLINT,
    @SendToCash BIT = 0,
    @StationCode SMALLINT = 0
AS
BEGIN
    SET NOCOUNT ON;
    BEGIN TRY
        ------------------------------------------- 1403 10 15 --------------------------------------
        DECLARE @ReferenceId NUMERIC(19, 0) = 0;
        DECLARE @LastInsertedId NUMERIC(19, 0);
        DECLARE @NumberDaysPassed INT = 0;
        DECLARE @StatusCode NUMERIC(19, 0) = 0;
        DECLARE @StatusMsg NVARCHAR(MAX);
        DECLARE @IssueResultNo NUMERIC(18, 0);
        --------------------- Check Exists Cach
        BEGIN TRAN;

        IF EXISTS
        (
            SELECT 1
            FROM dbo.TmpDrugH
            WHERE Kind_Flag = 1
                  AND kind_Save = 2
                  AND Nu_Forosh = @ReferenceInvoiceNo
        )
        BEGIN
            SET @StatusCode = 100;
            SET @StatusMsg = N' فاکتور فروش مورد نظر در صندوق ثبت شده است';
            RAISERROR(@StatusMsg, 16, 1);
        END;
        --------------------- Check Number of days passed
        SELECT @NumberDaysPassed = DATEDIFF(DAY, Tarikh, GETDATE()),
               @ReferenceId = Id_Havaleh
        FROM dbo.DrugH
        WHERE Kind_Flag = 1
              AND Nu_Forosh = @ReferenceInvoiceNo;

        IF @ReferenceId = 0
        BEGIN
            SET @StatusCode = 100;
            SET @StatusMsg = N'فاکتور فروش ثبت شده يافت نشد';
            RAISERROR(@StatusMsg, 16, 1);
        END;

        IF @NumberDaysPassed > 10
        BEGIN
            SET @StatusCode = 101;
            SET @StatusMsg
                = N'امکان برگشت خودکار نسخ بيشتر از 10 روز وجود ندارد ، در صورت نياز از منوي پذيرش - گزينه برگشت از فروش را انتخاب نماييد ';
            RAISERROR(@StatusMsg, 16, 1);
        END;
        --------------------- Insert into Temp for catch Id
        SET @StatusCode = 102;
        SET @StatusMsg = N'خطا در اضافه کردن اطلاعات هدر نسخه به ثبت موقت';
        INSERT INTO dbo.TmpDrugH
        (
            Computer_Code,
            Kind_Flag,
            kind_Save,
            [User_id],
            User_Cash,
            Id
        )
        VALUES
        (   @StationCode, '2', '1', @RegistrationUser, CASE
                                                           WHEN @SendToCash = 0 THEN
                                                               @RegistrationUser
                                                           ELSE
                                                               NULL
                                                       END, NEWID());

        SET @LastInsertedId = SCOPE_IDENTITY();
        --------------------- Update tmpDrugH From Sales Prescription
        SET @StatusCode = 103;
        SET @StatusMsg = N'خطا در آپديت اطلاعات نسخه ثبت موقت';

        UPDATE Upd
        SET kind_Save = S.kind_Save,
            Del_Flag = S.Del_Flag,
            OverFlagBimeh = S.OverFlagBimeh,
            HospitalFlag = S.HospitalFlag,
            Nu_Forosh = S.Nu_Forosh,
            Note_Code = S.Note_Code,
            Dumy_Code = S.Dumy_Code,
            Grade_Code = S.Grade_Code,
            Nezam_No = S.Nezam_No,
            Resive_Name = S.Trans_Name,
            Sazman_Code = S.Sazman_Code,
            Radif_Noskheh = S.Radif_Noskheh,
            Page_No = S.Page_No,
            Parvandeh_No = S.Parvandeh_No,
            TotPriceTaghizat = S.TotPriceTaghizat,
            TotPriceKala = S.TotPriceKala,
            TotPriceBimar = S.TotPriceBimar,
            TotPriceSazman = S.TotPriceSazman,
            TotPriceDiffer = S.TotPriceDiffer,
            TotPriceAzad = S.TotPriceAzad,
            HOtc = S.HOtc,
            TotPriceOTC = S.TotPriceOTC,
            TotPriceFaniBimar = S.TotPriceFaniBimar,
            TotPriceFaniSazman = S.TotPriceFaniSazman,
            TotPriceDaryafti = S.TotPriceDaryafti,
            TotPriceforosh = S.TotPriceforosh,
            TotPriceAfzayandeh = S.TotPriceAfzayandeh,
            TotPriceKahandeh = S.TotPriceKahandeh,
            Bedehkar = S.Bedehkar,
            BestanKar = S.BestanKar,
            Tarikh = GETDATE(),
            Tarikh_Etebar = S.Tarikh_Etebar,
            Tarikh_Noskheh = S.Tarikh_Noskheh,
            Tarikh_Paziresh = S.Tarikh_Paziresh,
            Per_Bimar = S.Per_Bimar,
            Per_Fani_Bimar = S.Per_Fani_Bimar,
            Trans_Name = S.Resive_Name,
            Nu_Bargasht_Forosh = @LastInsertedId,
            PT_Code = S.PT_Code,
            Par_No = S.Par_No,
            CheckU = S.CheckU,
            FamilyDoctorCode = S.FamilyDoctorCode,
            InternetVerificationUser = S.InternetVerificationUser,
            PrescriptionUser = S.PrescriptionUser,
            PrescriptionType = S.PrescriptionType,
            Upd.PrescriptionId = S.PrescriptionId
        FROM dbo.TmpDrugH Upd
            CROSS APPLY
        (SELECT * FROM dbo.DrugH WHERE Id_Havaleh = @ReferenceId) AS S
        WHERE Upd.Id_Havaleh = @LastInsertedId;
        --------------------- Insert Prescription Detail
        SET @StatusCode = 104;
        SET @StatusMsg = N'خطا در اضافه کردن اقلام نسخه فروش به ثبت موقت';
        
        alter table tmpDrugHavaleh disable trigger ti_hamrahDrug

        INSERT INTO dbo.TmpDrugHavaleh
        (
            Id_Havaleh,
            Sender,
            Reciver,
            Radif,
            K_Code,
            K_Qty1,
            Price_Forosh,
            Main_Price,
            [Status],
            Takhfif_Flag,
            Exp_Flag,
            Point_Flag,
            Serial_Flag,
            Make_Flag,
            Hamrah_Flag,
            CtrMojodi,
            Tot_Differ,
            Link_Like,
            Link_Record,
            EditQty_Flag,
            Price_Kharid,
            BimarPercent,
            JetId,
            FrequencyCode,
            RouteCode,
            Note,
            TypeOfMedicine
        )
        SELECT @LastInsertedId,
               Reciver,
               Sender,
               Radif,
               K_Code,
               K_Qty1,
               Price_Forosh,
               Main_Price,
               [Status],
               Takhfif_Flag,
               Exp_Flag,
               Point_Flag,
               Serial_Flag,
               Make_Flag,
               Hamrah_Flag,
               CtrMojodi,
               Tot_Differ,
               Link_Like,
               Link_Record,
               EditQty_Flag,
               Price_Kharid,
               BimarPercent,
               JetId,
               FrequencyCode,
               RouteCode,
               Note,
               TypeOfMedicine
        FROM dbo.DrugHavaleh
        WHERE Id_Havaleh = @ReferenceId;
        alter table tmpDrugHavaleh enable trigger ti_hamrahDrug
        --------------------- Insert Prescription Transaction
        SET @StatusCode = 105;
        SET @StatusMsg = N'خطا در اضافه کردن موارد کاهنده افزاينده به فاکتور ثبت موقت';

        INSERT INTO dbo.Tmp_Over_Under_Factor_Drug
        (
            Id_Havaleh,
            Name,
            Code_Over_Under,
            Type,
            Price,
            [Percent],
            Act_Code,
            Guy_Code,
            Max_Price,
            Max_percent,
            ShowPrice,
            IsDuty
        )
        SELECT @LastInsertedId,
               D.[Name],
               O.Code_Over_Under,
               O.[Type],
               O.Price,
               O.[Percent],
               O.Act_Code,
               O.Guy_Code,
               D.Max_Price,
               D.Max_Percent,
               D.ShowPrice,
               D.Duty_Flag
        FROM dbo.Over_Under_Factor_Drug O
            JOIN dbo.Over_Under D
                ON D.AutoId = O.Code_Over_Under
        WHERE O.Guy_Code NOT IN ( '-4', '-5' )
              AND O.Id_Havaleh = @ReferenceId;
        ----------------------------------------Send To Cahsh 
        IF @SendToCash = 1
        BEGIN

            UPDATE dbo.TmpDrugH
            SET kind_Save = 2
            WHERE Id_Havaleh = @LastInsertedId
                  AND Kind_Flag = 2;

            SET @StatusCode = 1;
            SET @StatusMsg
                = N'عمليات با موفقيت انجام شد ، شماره فاکتور برگشتي در صندوق   : '
                  + CAST(@LastInsertedId AS VARCHAR(10));
        END;
        ----------------------------------------Issue Prescription
        IF @SendToCash = 0
        BEGIN
            SET @StatusCode = 106;
            SET @StatusMsg = N'خطا در صدور نسخه برگشتي';

            DECLARE @tmp TABLE
            (
                ResultCode INT NULL
            );
            INSERT INTO @tmp
            EXEC dbo.Sodor_Factor_Drug @Msg_Num = @IssueResultNo OUTPUT,
                                       @TmpId = @LastInsertedId;


            IF @IssueResultNo = -3
            BEGIN
                SET @StatusCode = 107;
                SET @StatusMsg
                    = N' فاکتور شماره : ' + CAST(@LastInsertedId AS VARCHAR(10))
                      + N' فاقد اقلام داروئي است مجددا توسط پذيرش فراخواني شده و ارسال گردد';
            END;
            IF @IssueResultNo = -6
            BEGIN
                SET @StatusCode = 108;
                SET @StatusMsg
                    = N' فاکتور شماره : ' + CAST(@LastInsertedId AS VARCHAR(10))
                      + N'  فاقد اقلام دارويي مي باشد صدور امکانپذير نمي باشد';
            END;

            IF @IssueResultNo = 0
               OR @IssueResultNo = -5
               OR @IssueResultNo = -1
               OR @IssueResultNo = -2
            BEGIN
                SET @StatusCode = 109;
                SET @StatusMsg = N' : خطاي سيستم جهت صدور فاکتور شماره' + @LastInsertedId;
            END;
            SET @StatusCode = 1;
            SET @StatusMsg
                = N'عمليات با موفقيت انجام شد ، شماره فاکتور برگشتي : ' + CAST(@LastInsertedId AS VARCHAR(10));
        END;

        SELECT @StatusCode StatusCode,
               @StatusMsg StatusMsg;
        COMMIT TRAN;
    END TRY
    BEGIN CATCH
    alter table tmpDrugHavaleh enable trigger ti_hamrahDrug
        -- مديريت خطا
        SELECT @StatusCode StatusCode,
               @StatusMsg StatusMsg;
        PRINT ERROR_MESSAGE();
        ROLLBACK TRAN;
    END CATCH;
END;
